]> git.r.bdr.sh - rbdr/super-polarity/blobdiff - Super Polarity/ActorManager.cs
Implements polarity system
[rbdr/super-polarity] / Super Polarity / ActorManager.cs
index bca71687f588d15f5d210c6facd99f835e4593e7..39ae336f313121ea28964ea9854190a44e3a7009 100644 (file)
@@ -28,6 +28,7 @@ namespace SuperPolarity
 
         static public void Update(GameTime gameTime) 
         {
+            CheckActors();
             foreach (Actor actor in Actors)
             {
                 actor.Update(gameTime);
@@ -41,5 +42,45 @@ namespace SuperPolarity
                 actor.Draw(spriteBatch);
             }
         }
+
+        static void CheckActors()
+        {
+            var i = 0;
+            foreach (Actor actor in Actors)
+            {
+                i++;
+                foreach (Actor other in Actors.Skip(i))
+                {
+                    CheckCollision(actor, other);
+
+                    if (actor.GetType().IsSubclassOf(typeof(Ship)) && other.GetType().IsSubclassOf(typeof(Ship)))
+                    {
+                        CheckMagnetism((Ship)actor, (Ship)other);
+                    }
+                }
+            }
+        }
+
+        static void CheckCollision(Actor actor, Actor other)
+        {
+
+        }
+
+        static void CheckMagnetism(Ship actor, Ship other)
+        {
+            if (actor.CurrentPolarity != Ship.Polarity.Neutral && other.CurrentPolarity != Ship.Polarity.Neutral)
+            {
+                var dy = other.Position.Y - actor.Position.Y;
+                var dx = other.Position.X - actor.Position.X;
+                var linearDistance = Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2));
+                var angle = (float) Math.Atan2(dy, dx);
+
+                if (linearDistance < actor.MagneticRadius || linearDistance < other.MagneticRadius)
+                {
+                    actor.Magnetize(other, (float)linearDistance, angle);
+                    other.Magnetize(actor, (float)linearDistance, 90 - angle);
+                }
+            }
+        }
     }
 }